package com.hc.demo.controller;

import com.hc.demo.domain.Orders;
import com.hc.demo.dto.ResultResponse;
import com.hc.demo.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;

/**
 * 订单控制器
 */
@RestController
public class OrdersController {

    @Autowired
    OrdersService ordersService;

    //查询某个用户的已经归档的订单
    @RequestMapping("/queryOrderByUserIdAndState")
    public ResultResponse queryOrderByUserIdAndState(@RequestBody Orders orders){

       // return ordersService.queryOrderByUserId(userId);
        return ordersService.queryOrderByUserIdAndState(orders);
    }

    @RequestMapping("/cancelAppointment/{orderId}")
    public ResultResponse cancelAppointment(@PathVariable("orderId")Integer orderId){
        //取消订单：就是把订单删除
        return ordersService.cancelAppointment(orderId);
    }


    /**
     *  查询某个用户的订单，最好降序排序
     *  mapper  service  controller
     */
    @RequestMapping("/queryOrderByUserId/{userId}")
    public ResultResponse queryOrderByUserId(@PathVariable("userId") String userId){
        System.out.println("queryOrderByUserId: userId:"+userId);
        return ordersService.queryOrderByUserId(userId);
    }

    /**
     * 创建订单的接口
     * 参数：Orders对象  （userId，hpId，orderDate，smId，state）  订单号没有，怎么办？MySQL数据库自动创建订单号
     * 返回什么呢？返回成功，如果不成功抛出异常
     * 注意：原来的系统要求一个用户只能预约一次  ×   一个用户某个日期只能预约一次  √   当前已无号  √
     *
     * 写代码的顺序： OrdersMapper---》OrdersService---》OrdersController
     */


    @RequestMapping("/createOrder")  //后端接口白盒测试：正向测试  逆向测试
    public ResultResponse createOrder(@RequestBody Orders orders){
        System.out.println("into createOrder..........................");
        //把日期处理一下，只保留年月日
        orders.setOrderDate(getDateOnly(orders.getOrderDate()));
        return ordersService.createOrders(orders);
    }

    public Date getDateOnly(Date date) {
        // 转换为 LocalDate（只保留年月日）
        LocalDate localDate = date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDate();

        // 转回 Date（时间部分为 00:00:00）
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }




















}
